home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / white.arc / MVPSEDI3.4TH < prev   
Encoding:
Text File  |  1986-11-07  |  20.1 KB  |  1,522 lines

  1. ( Henry Laxen's Screen EDITOR - ACKNOWLEDGEMENTS      03Jan84RSW
  2. )  10 LIST  11 LOAD  EXIT
  3.  
  4.     This screen editor is based on an article in
  5. Dr. Dobb's Journal, Number 59, September 1981, page 27
  6. by Henry Laxen.  It has been adapted for the IBM-PC
  7. (or equivalent) running MVP-FORTH version 1.0305.03 by
  8. R.S. White, Marion, IA.
  9.      It is R.S. White's understanding that this editor is in
  10. the public domain for non-commercial use only!  Any commercial
  11. use or sales of this editor should be arranged by
  12. contacting:
  13.       Henry Laxen
  14.       1259 Cornell Ave.
  15.       Berkeley, CA. 94706
  16.       (415) 525-8582
  17. ( LOAD SCREEN FOR SYSTEM GENERATION                  29Oct83 RSW
  18. )
  19.  
  20.  
  21.     24 LOAD     ( LOAD GENERAL PURPOSE STUFF )
  22.     38 LOAD     ( LOAD THE EDITOR )
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33. FORTH Development System Documentation                01Nov83RSW
  34.  
  35.  
  36.    The FORTH editor is easy to learn and to use. It consists of
  37. control key ( or special function key ) commands that allow
  38. cursor movement and text entry and deletion so that editing can
  39. be done quickly and smoothly.
  40.  
  41. CURSOR MOVEMENT
  42.  
  43.    You can place the cursor anywhere on the screen by using a
  44. few editing commands.
  45.  
  46.    The following table describes the commands that are relevant
  47. to cursor movement.
  48.  
  49. CURSOR MOVEMENT COMMANDS                              01Nov83RSW
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225. ( \    COMMENT TO END OF LINE                       29Oct83 RSW
  226. )
  227.  
  228.   CR CR ." Most of the general purpose stuff is already "
  229.   CR    ." availible from MVP-FORTH binary image. " CR
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.   -->
  239.  
  240.  
  241. \  (S  (P  DOCUMEMTATION WORDS                       206Nov83RSW
  242.  
  243. : (S           ( --- )
  244.    41 WORD DROP ;
  245.    IMMEDIATE
  246.  
  247. : (P           ( --- )
  248.    41 WORD DROP ;
  249.    IMMEDIATE
  250.  
  251.  
  252.  -->
  253.  
  254.  
  255.  
  256.  
  257. \ SC@  fetch scan code byte of last key hit, IBM-PC   31Oct83RSW
  258.       HEX
  259. : SC@   ( --- scan-code ) \ fetch scan code of last key hit
  260.         40 DUP 1C @L    ( next-buf-addr --- )
  261.         20 MOD 1F +     ( prev-scan-code-buff-addr --- )
  262.         C@L ;           ( last-scan-code-byte --- )
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.                         DECIMAL -->
  271.  
  272.  
  273. \ L     INTELLIGENT SCREEN LISTER                    229Oct83RSW
  274.  
  275.  
  276. : L     ( (S [N] --- )
  277.    DEPTH IF
  278.     DUP SCR !
  279.    ELSE
  280.     SCR @
  281.    THEN
  282.    LIST ;
  283.  
  284.  
  285.   -->
  286.  
  287.  
  288.  
  289. \       BEEP
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299. : BEEP
  300.     7 EMIT ;
  301.  
  302.  
  303.   -->
  304.  
  305. \  BOUNDS      DO LOOP SETUP                    28Oct83 RSW
  306.  
  307. : BOUNDS    (  (S ADDR LEN --- ADDR+LEN ADDR )
  308.      OVER + SWAP ;
  309.  
  310.  -->
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321. \
  322.    -->
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. \
  338.    -->
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353. \
  354.    -->
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369. \
  370.   -->
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385. \
  386.   -->
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401. \  >=   <>  U> CONDITIONALS                     28Oct83 RSW
  402.  
  403. : >=  ( (S N1 N2 --- BOOL )
  404.  < 0= ;
  405.  
  406. : <>
  407.   = 0= ;
  408.  
  409. : <=
  410.    > 0= ;
  411.  
  412. : U>
  413.    SWAP U< ;
  414.  
  415.    -->
  416.  
  417. \ RE-FORTH   RE-ENTER FORTH FOR 1 LINE           28Oct83 RSW
  418.  
  419. : RE-FORTH    ( (S --- ??? )
  420.    >IN @ >R
  421.    BLK @ >R
  422.    0 >IN ! 0 BLK !
  423.    QUERY INTERPRET
  424.    R> BLK !
  425.    R> >IN ! ;
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.      -->
  433. \
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449. \ CASE:
  450.  
  451. : CASE:    ( (S N --- )
  452.    CREATE  ] SMUDGE
  453.    DOES>
  454.     SWAP 2* + @
  455.     EXECUTE ;
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.      -->
  463.  
  464.  
  465. \  -TIDY                                       28Oct83 RSW
  466.  
  467. : -TIDY  ( (S ADDR LEN --- )
  468.    BOUNDS DO
  469.     I C@ BL < IF
  470.      BL I C!
  471.     THEN
  472.    LOOP ;
  473.  
  474.     BASE @ DECIMAL
  475. 1024 CONSTANT B/BUF    \ MVPFORTH BYTES-PER-BUFFER
  476. 1 CONSTANT B/SCR       \ MVPFORTH BLOCKS-PER-SCREEN
  477.      BASE !    \ RESTORE PRESENT BASE
  478.  
  479.    -->
  480.  
  481. \ VARIABLE AND CONSTANT DEFINITIONS               28OCT83 RSW
  482.  VOCABULARY EDIT IMMEDIATE EDIT DEFINITIONS
  483. VARIABLE &MODE  0 &MODE !
  484. VARIABLE &CURSOR  0 &CURSOR !
  485. VARIABLE &OLD-MODE  0 &OLD-MODE !
  486. VARIABLE &UPDATE  0 &UPDATE !
  487. VARIABLE &BUF-ADR  0 &BUF-ADR !
  488. VARIABLE &E-ID
  489.  12 ALLOT
  490.  &E-ID 14 BLANK
  491.  
  492. 5 CONSTANT %X-OFF
  493. 2 CONSTANT %Y-OFF
  494.  B/SCR B/BUF * CONSTANT C/SCR    \ CHARS PER SCREEN
  495.  C/SCR C/L /   CONSTANT L/SCR    \ LINES PER SCREEN
  496.   -->
  497. \ CURSOR POSITIONING VECTORS                        29Oct83 RSW
  498.  
  499. VARIABLE 'CRTXY
  500. VARIABLE 'CRTCLR-SCR
  501. VARIABLE 'CLEAR-TO-EOL
  502.  
  503. : CRTXY   ( (S X Y --- )
  504.    'CRTXY @ EXECUTE ;
  505.  
  506. : CRTCLR-SCR
  507.    'CRTCLR-SCR @ EXECUTE ;
  508.  
  509. : CLEAR-TO-EOL   ( (S col --- )
  510.    'CLEAR-TO-EOL @ EXECUTE ;
  511.    -->
  512.  
  513. \ DESCRIPTION OF CURSOR COMMANDS
  514.   -->
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529. \ DESC CONTINUED
  530.     -->
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545. \ DESC CONTINUED
  546.    -->
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561. \ CURPOS +CURPOS   MOVE-CURSOR                      29Oct83 RSW
  562. : CURPOS
  563.    &CURSOR @ ;
  564.  
  565. : +CURPOS
  566.    &CURSOR +!
  567.    CURPOS 0 MAX
  568.    [ C/SCR 1- ] LITERAL
  569.    MIN &CURSOR ! ;
  570.  
  571. : MOVE-CURSOR
  572.    +CURPOS
  573.    CURPOS C/L /MOD
  574.    %Y-OFF + SWAP
  575.    %X-OFF + SWAP
  576.    CRTXY ;    -->
  577. \ BUF-ADR
  578.  
  579. : BUF-ADR
  580.    &BUF-ADR @ + ;
  581.  
  582. : BUFPOS
  583.   CURPOS BUF-ADR ;
  584.  
  585.   -->
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593. \ E-UPDATE
  594. : E-UPDATE
  595.    1 &UPDATE ! ;
  596.  
  597.   -->
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609. \ BUF-MOVE
  610.  
  611. : BUF-MOVE
  612.    ROT BUF-ADR
  613.    ROT BUF-ADR
  614.    ROT BMOVE        \ MVPFORTH SPEC
  615.    E-UPDATE ;
  616.  
  617.      -->
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625. \ ?PRINTABLE
  626. : ?PRINTABLE
  627.    DUP 32 <
  628.    SWAP 126 >
  629.    OR 0= ;
  630.  
  631.      -->
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641. \ >LINE# LINE#
  642. : >LINE#
  643.    C/L / ;
  644.  
  645. : LINE#>
  646.    C/L * ;
  647.  
  648.      -->
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657. \ CHAR-TO-EOL
  658. : CHARS-TO-EOL
  659.    C/L MOD
  660.    C/L SWAP - ;
  661.  
  662.      -->
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673. \ DISPLAY-TO-EOL                                      29Oct83RSW
  674.  
  675. : DISPLAY-TO-EOL   ( (S POS --- )
  676.    DUP BUF-ADR          \ GET ADDRESS IN BUFFER
  677.    OVER CHARS-TO-EOL    \ REST OF LINE
  678.    -TRAILING            \ IGNORE BLANKS
  679.    ROT OVER + >R        \ SAVE RESULTANT CURSOR POSITION
  680.   TYPE                  \ DISPLAY WHATS THERE
  681.   R> CLEAR-TO-EOL       \ AND REMOVE THE REST
  682.   ;
  683.  
  684. ( (P DISPLAY-TO-EOL DISPLAYS THE REST OF THE LINE STARTING FROM
  685. THE CURRENT CURSOR POSITION.  IT ASSUMES THAT THE TERMINAL
  686. CURSOR IS PROPERLY POSITIONED BEFORE IT EXECUTES. )
  687.  
  688.       -->
  689. \ ?EMPTY-LINE
  690. : ?EMPTY-LINE
  691.    LINE#> BUF-ADR C/L
  692.    -TRAILING
  693.   SWAP DROP 0=
  694.   ;
  695.  
  696.        -->
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705. \ DISPLAY-TO-EOS
  706. : DISPLAY-TO-EOS
  707.    CURPOS SWAP
  708.    L/SCR SWAP DO
  709.     I LINE#>
  710.     DUP &CURSOR !
  711.     0 MOVE-CURSOR
  712.     DISPLAY-TO-EOL
  713.    LOOP
  714.    &CURSOR !
  715.    0 MOVE-CURSOR ;
  716.  
  717.        -->
  718.  
  719.  
  720.  
  721. \ EXPAND
  722.  
  723. : EXPAND
  724.    DUP DUP
  725.    C/L +
  726.    C/SCR OVER -
  727.    BUF-MOVE
  728.    BUF-ADR C/L BLANK
  729.    E-UPDATE ;
  730.  
  731.        -->
  732.  
  733.  
  734.  
  735.  
  736.  
  737. \ SHRINK
  738.  
  739. : SHRINK
  740.    DUP
  741.    C/L + SWAP
  742.    OVER C/SCR SWAP -
  743.    BUF-MOVE
  744.    [ L/SCR 1- ] LITERAL
  745.    LINE#> BUF-ADR C/L BLANK
  746.    E-UPDATE ;
  747.  
  748.       -->
  749.  
  750.  
  751.  
  752.  
  753. \ INSERT-LINE
  754.  
  755. : INSERT-LINE
  756.    [ L/SCR 1- ] LITERAL
  757.    ?EMPTY-LINE IF
  758.     DUP EXPAND
  759.     >LINE# DISPLAY-TO-EOS
  760.    ELSE
  761.     BEEP
  762.    THEN ;
  763.  
  764.      -->
  765.  
  766.  
  767.  
  768.  
  769. \ DELETE-LINE
  770.  
  771. : DELETE-LINE
  772.    >LINE# DUP LINE#> SHRINK
  773.    DISPLAY-TO-EOS ;
  774.  
  775.   -->
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785. \ INS-CHAR
  786.  
  787. : INS-CHAR
  788.    DUP DUP 1+
  789.    OVER CHARS-TO-EOL 1-
  790.    BUF-MOVE
  791.    BUF-ADR C! ;
  792.  
  793.        -->
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801. \ DEL-CHAR
  802.  
  803. : DEL-CHAR
  804.    DUP DUP 1+ SWAP
  805.    OVER CHARS-TO-EOL
  806.    BUF-MOVE
  807.    DUP CHARS-TO-EOL + 1-
  808.    BUF-ADR BL SWAP C! ;
  809.  
  810.      -->
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817. \ ARROW COMMANDS
  818.  
  819. : R-ARROW
  820.    1 +CURPOS ;
  821.  
  822. : L-ARROW
  823.    -1 +CURPOS ;
  824.  
  825. : U-ARROW
  826.    C/L NEGATE +CURPOS ;
  827.  
  828. : D-ARROW
  829.    C/L +CURPOS ;
  830.  
  831.      -->
  832.  
  833. \ I-LINE D-LINE D-CHAR INSERT-MODE                    29Oct83RSW
  834.  
  835. : I-LINE
  836.    CURPOS INSERT-LINE ;
  837.  
  838. : D-LINE
  839.    CURPOS DELETE-LINE ;
  840.  
  841. : D-CHAR
  842.    CURPOS DEL-CHAR
  843.    CURPOS DISPLAY-TO-EOL ;
  844.  
  845. : INSERT-MODE
  846.    &MODE 1 TOGGLE ;
  847.  
  848.       -->
  849. \ RETURN EXIT-EDIT                                    24Dec83RSW
  850.  
  851. : RETURN
  852.    CURPOS >LINE#
  853.    1+
  854.    [ L/SCR 1- ] LITERAL MIN
  855.    LINE#> &CURSOR ! ;
  856.  
  857. : EXIT-EDIT
  858.    CR ABORT" OK " ;                               \ MVP version
  859.     ( R> DROP R> DROP R> DROP R> DROP R> DROP ; ) \ fig version
  860.  
  861.       -->
  862.  
  863.  
  864.  
  865. \ ADD-ID MOV-BOT                                      24Dec83RSW
  866.  
  867. : ADD-ID
  868.      &E-ID
  869.      [ C/L 10 - ] LITERAL
  870.      BUF-ADR 10 CMOVE ;
  871.  
  872. : MOV-BOT   ( --- scr-addr )
  873.      C/SCR MOVE-CURSOR
  874.      CR CR
  875.      SCR ;
  876.  
  877.  
  878.  
  879.  
  880.                                 -->
  881. \ NEW-SCR                                             24Dec83RSW
  882.  
  883. : NEW-SCR
  884.    SCR @ BLOCK &BUF-ADR !
  885.    CRTCLR-SCR
  886.    0 &MODE ! 0 &CURSOR !
  887.    0 &UPDATE !
  888.    0 %Y-OFF CRTXY
  889.    L/SCR 0 DO
  890.      I 3 .R CR
  891.    LOOP
  892.    10 0 CRTXY
  893.    ." Scr: " SCR @ 4 .R 6 SPACES ." X=     Y="
  894.    0 DISPLAY-TO-EOS ;
  895.  -->
  896.  
  897. \ PAGE-UP -- edit next lower # screen                 03Jan84RSW
  898.  
  899. : PAGE-UP
  900.     &UPDATE @ IF        \ screen modified?
  901.       ADD-ID UPDATE     \  yes - finish up screen
  902.     THEN
  903.     SCR @ 1-
  904.     DUP DUP 0 < SWAP BPDRV >= OR IF              \ out of range?
  905.       CR BEEP ." screen " . ." is out of range"  \  yes - error
  906.       CR ." hit any key to continue " CR BEEP KEY
  907.     ELSE
  908.       SCR !                      \ no - point to previous screen
  909.     THEN
  910.     NEW-SCR ;   -->
  911.  
  912.  
  913. \ PAGE-DOWN -- edit next higher # screen              03Jan84RSW
  914.  
  915. : PAGE-DOWN
  916.     &UPDATE @ IF        \ screen modified?
  917.       ADD-ID UPDATE     \  yes - finish up screen
  918.     THEN
  919.     SCR @ 1+
  920.     DUP BPDRV >= IF                             \ out of range?
  921.       CR BEEP ." screen " . ." is out of range" \  yes - error
  922.       CR ." hit any key to continue" BEEP KEY
  923.     ELSE
  924.       SCR !                         \  no - point to next screen
  925.     THEN
  926.     NEW-SCR ;   -->
  927.  
  928.  
  929. \                                                     24Dec83RSW
  930.  
  931.         -->
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945. \                                                     24Dec83RSW
  946.  
  947.         -->
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961. \ EXIT-UPDATE                                         24Dec83RSW
  962.  
  963. : EXIT-UPDATE
  964.    MOV-BOT
  965.    @ .
  966.    &UPDATE @ IF
  967.      ADD-ID
  968.      ." Modified" UPDATE FLUSH
  969.    ELSE ." Unmodified" THEN
  970.    EXIT-EDIT ;
  971.  
  972.      -->
  973.  
  974.  
  975.  
  976.  
  977. \ EXIT-SCRATCH                                        24Dec83RSW
  978.  
  979. : EXIT-SCRATCH
  980.    MOV-BOT
  981.    ?
  982.    ." Abandoned"
  983.    EXIT-EDIT ;
  984.  
  985.        -->
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993. \ E-TAB
  994.  
  995. : E-TAB
  996.    8 CURPOS 8 MOD -
  997.    +CURPOS ;
  998.  
  999.       -->
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009. \ SCAN+=
  1010. : SCAN+=
  1011.    2DUP = IF
  1012.      DROP 2DROP 0
  1013.    ELSE
  1014.      0 ROT ROT DO
  1015.        OVER I C@ = IF
  1016.          LEAVE
  1017.        ELSE 1+ THEN
  1018.      LOOP
  1019.      SWAP DROP
  1020.    THEN ;
  1021.  
  1022.         -->
  1023.  
  1024.  
  1025. \ SCAN+<>
  1026. : SCAN+<>
  1027.    2DUP = IF
  1028.      DROP 2DROP 0
  1029.    ELSE
  1030.      0 ROT ROT DO
  1031.        OVER I C@ <> IF
  1032.          LEAVE
  1033.        ELSE 1+ THEN
  1034.      LOOP
  1035.      SWAP DROP
  1036.    THEN ;
  1037.  
  1038.       -->
  1039.  
  1040.  
  1041. \ SCAN-=
  1042. : SCAN-=
  1043.    2DUP = IF
  1044.      DROP 2DROP 0
  1045.    ELSE
  1046.      0 ROT ROT DO
  1047.        OVER I C@ = IF
  1048.          LEAVE
  1049.        ELSE 1- THEN
  1050.      -1 +LOOP
  1051.      SWAP DROP
  1052.    THEN ;
  1053.  
  1054.       -->
  1055.  
  1056.  
  1057. \ SCAN-<>
  1058. : SCAN-<>
  1059.    2DUP = IF
  1060.      DROP 2DROP 0
  1061.    ELSE
  1062.      0 ROT ROT DO
  1063.        OVER I C@ <> IF
  1064.          LEAVE
  1065.        ELSE 1- THEN
  1066.      -1 +LOOP
  1067.      SWAP DROP
  1068.    THEN ;
  1069.  
  1070.       -->
  1071.  
  1072.  
  1073. \ MOVE-LEFT-WORD
  1074. : MOVE-LEFT-WORD
  1075.     BL 0 BUF-ADR BUFPOS
  1076.     SCAN-= >R
  1077.     BL 0 BUF-ADR BUFPOS R@ +
  1078.     SCAN-<> R> + >R
  1079.     BL 0 BUF-ADR BUFPOS R@ +
  1080.     SCAN-= R> +
  1081.     DUP BUFPOS + C@ BL = IF
  1082.      1+
  1083.     THEN ;
  1084.  
  1085.          -->
  1086.  
  1087.  
  1088.  
  1089. \ MOVE-RIGHT-WORD
  1090.  
  1091. : MOVE-RIGHT-WORD
  1092.    BL [ C/SCR 1- ] LITERAL BUF-ADR
  1093.    BUFPOS SCAN+= >R
  1094.    BL [ C/SCR 1- ] LITERAL BUF-ADR
  1095.    BUFPOS R@ +
  1096.    SCAN+<> R> + ;
  1097.  
  1098.        -->
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105. \ R-WORD L-WORD
  1106.  
  1107. : R-WORD
  1108.    MOVE-RIGHT-WORD
  1109.    +CURPOS ;
  1110.  
  1111. : L-WORD
  1112.    MOVE-LEFT-WORD
  1113.    +CURPOS ;
  1114.  
  1115.         -->
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121. \ DEL-CHARS                                           29Oct83RSW
  1122.  
  1123. : DEL-CHARS     ( (S N POS --- )
  1124.    2DUP + OVER
  1125.    DUP CHARS-TO-EOL
  1126.    BUF-MOVE
  1127.    DUP CHARS-TO-EOL +
  1128.    OVER - BUF-ADR
  1129.    SWAP BLANK ;
  1130.  
  1131.        -->
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137. \ D-WORD
  1138.  
  1139. : D-WORD
  1140.    MOVE-RIGHT-WORD
  1141.    CURPOS BUF-ADR
  1142.    CURPOS CHARS-TO-EOL
  1143.    -TRAILING SWAP DROP
  1144.    MIN CURPOS DEL-CHARS
  1145.    CURPOS DISPLAY-TO-EOL ;
  1146.  
  1147.          -->
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153. \ U-TAB D-TAB CRL-SCREEN
  1154. : U-TAB
  1155.    4 C/L *
  1156.    NEGATE +CURPOS ;
  1157.  
  1158. : D-TAB
  1159.    4 C/L *
  1160.    +CURPOS ;
  1161.  
  1162. : CLR-SCREEN
  1163.    0 &CURSOR !
  1164.    CURPOS BUF-ADR
  1165.    C/SCR BLANK
  1166.    0 DISPLAY-TO-EOS
  1167.    E-UPDATE ;
  1168.              -->
  1169. \ DISPLAY-STATUS
  1170.  
  1171. : DISPLAY-STATUS
  1172.    &MODE @ &OLD-MODE @ <> IF
  1173.      40 0 CRTXY
  1174.      &MODE @ IF
  1175.        ." Insert ON"
  1176.      ELSE
  1177.        9 SPACES
  1178.      THEN
  1179.      &MODE @ &OLD-MODE !
  1180.    THEN
  1181.    CURPOS C/L /MOD
  1182.    35 0 CRTXY 2 .R
  1183.    28 0 CRTXY 2 .R ;
  1184.          -->
  1185. \ CLR-LINE
  1186.  
  1187. : CLR-LINE
  1188.    CURPOS DUP
  1189.    >LINE# LINE#> &CURSOR !
  1190.    CURPOS BUF-ADR
  1191.    C/L BLANK
  1192.    E-UPDATE
  1193.    0 MOVE-CURSOR
  1194.    CURPOS CLEAR-TO-EOL
  1195.    &CURSOR ! ;
  1196.  
  1197.        -->
  1198.  
  1199.  
  1200.  
  1201. \ GET-USER-ID
  1202.  
  1203. : GET-USER-ID
  1204.    &E-ID 10 -TRAILING 0= IF
  1205.      CR ." Enter Your ID: "
  1206.      10 0 DO 46 ( . ) EMIT LOOP
  1207.      10 0 DO 8 ( BS ) EMIT LOOP
  1208.      10 EXPECT
  1209.      &E-ID 10 -TIDY
  1210.    ELSE
  1211.     DROP
  1212.    THEN ;
  1213.  
  1214.          -->
  1215.  
  1216.  
  1217. \ CONTROL CHARACTER DEFINITIONS
  1218.  
  1219. CASE: (CONTROL-CHAR)
  1220.  
  1221.    BEEP        \ 0: c@ --- ERROR
  1222.    L-WORD
  1223.    CLR-LINE
  1224.    D-TAB
  1225.    R-ARROW
  1226.    U-ARROW
  1227.    R-WORD
  1228.    D-CHAR
  1229.    L-ARROW
  1230.    E-TAB
  1231.  -->
  1232.  
  1233. \ CONTROL CHAR DEF CONTINUED
  1234.  
  1235.      BEEP
  1236.      CLR-SCREEN
  1237.      BEEP
  1238.      RETURN
  1239.      I-LINE
  1240.      BEEP
  1241.      BEEP
  1242.      BEEP
  1243.      U-TAB
  1244.      L-ARROW
  1245.  -->
  1246.  
  1247.  
  1248.  
  1249. \ CONTROL CHAR DEF CONTINUED
  1250.  
  1251.    D-WORD
  1252.    BEEP
  1253.    INSERT-MODE
  1254.    BEEP
  1255.    D-ARROW
  1256.    D-LINE
  1257.    EXIT-SCRATCH
  1258.    EXIT-UPDATE      \ 27: ESC --- EXIT EDITOR NORMALLY
  1259.    ;
  1260.  
  1261.      -->
  1262.  
  1263.  
  1264.  
  1265. \                                                     24Dec83RSW
  1266.  
  1267.         -->
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281. \ special IBM PC key definitions                      06Nov83RSW
  1282.  
  1283. CASE: <IBM-KEY>
  1284.  
  1285.    I-LINE       \ 0;59 F1 --- INSERT LINE
  1286.    EXIT-UPDATE  \ 1;60 F2 --- EXIT EDITOR NORMALLY
  1287.    EXIT-SCRATCH \ 2;61 F3 --- ABANDON SCREEN
  1288.    CLR-SCREEN   \ 3;62 F4 --- CLEAR SCREEN
  1289.    BEEP         \ 4;63 F5 --- ERROR
  1290.    CLR-LINE     \ 5;64 F6 --- BLANK OUT CURRENT LINE
  1291.    D-WORD       \ 6;65 F7 --- DELETE CURRENT WORD
  1292.    D-LINE       \ 7;66 F8 --- DELETE CURRENT LINE
  1293.    L-WORD       \ 8;67 F9 --- MOVE TO NEXT WORD ON LEFT
  1294.    R-WORD       \ 9;68 F10 -- MOVE TO NEXT WORD ON RIGHT
  1295.    BEEP         \ 10;69   --- ERROR
  1296.  -->
  1297. \ special IBM PC keys continued                       24Dec83RSW
  1298.    BEEP         \ 11;70      --- ERROR
  1299.    U-TAB        \ 12;71 Home --- MOVE UP 4 LINES
  1300.    U-ARROW      \ 13;72  ^   --- MOVE UP ONE LINE up-arrow
  1301.    PAGE-UP      \ 14;73 PgUp --- EDIT NEXT LOWER # SCREEN
  1302.    BEEP         \ 15;74      --- ERROR
  1303.    L-ARROW      \ 16;75 <--  --- MOVE LEFT ONE CHAR
  1304.    BEEP         \ 17;76      --- ERROR
  1305.    R-ARROW      \ 18;77 -->  --- MOVE RIGHT ONE CHAR
  1306.    BEEP         \ 19;78      --- ERROR
  1307.    D-TAB        \ 20;79 End  --- MOVE DOWN 4 LINES
  1308.    D-ARROW      \ 21;80  v   --- MOVE DOWN ONE LINE down-arrow
  1309.    PAGE-DOWN    \ 22;81 PgDn --- EDIT NEXT HIGHER # SCREEN
  1310.    INSERT-MODE  \ 23;82 Ins  --- TOGGLE INSERT MODE
  1311.    D-CHAR       \ 24;83 Del  --- DELETE CURRENT CHAR
  1312.    ;    -->
  1313. \ IBM-KEY  process special IBM PC edit keys           31Oct83RSW
  1314.  
  1315. : IBM-KEY  ( CHAR --- )
  1316.    DROP SC@             \ forget key code & fetch scan code
  1317.    DUP 58 > IF          \ in valid range?
  1318.      DUP 84 < IF        \   maybe - in valid range?
  1319.        59 - <IBM-KEY>   \            yes - process key
  1320.      ELSE
  1321.        DROP BEEP        \            no - complain
  1322.      THEN
  1323.    ELSE
  1324.      DROP BEEP          \   no - complain
  1325.    THEN ;       -->
  1326.  
  1327.  
  1328.  
  1329. \ CONTROL-CHAR                                        31Oct83RSW
  1330.  
  1331. : CONTROL-CHAR
  1332.    DUP 0= IF            \ special IBM key?
  1333.      IBM-KEY            \  yes - do it
  1334.    ELSE
  1335.      DUP 28 < IF        \  no - control key?
  1336.        (CONTROL-CHAR)   \         yes - do it
  1337.      ELSE
  1338.        DROP BEEP        \         no - complain
  1339.      THEN
  1340.    THEN ;       -->
  1341.  
  1342.  
  1343.  
  1344.  
  1345. \ E-OVERSTRIKE
  1346.  
  1347. : E-OVERSTRIKE
  1348.    KEY DUP
  1349.    ?PRINTABLE IF
  1350.      DUP EMIT
  1351.      BUFPOS C!
  1352.      E-UPDATE
  1353.      1 +CURPOS
  1354.    ELSE
  1355.     CONTROL-CHAR
  1356.    THEN ;
  1357.  
  1358.        -->
  1359.  
  1360.  
  1361. \ E-INSERT
  1362.  
  1363. : E-INSERT
  1364.    KEY DUP
  1365.    ?PRINTABLE IF
  1366.      CURPOS INS-CHAR
  1367.      CURPOS DISPLAY-TO-EOL
  1368.      1 +CURPOS
  1369.    ELSE
  1370.      CONTROL-CHAR
  1371.    THEN ;
  1372.  
  1373.          -->
  1374.  
  1375.  
  1376.  
  1377. \ E-INIT                                              24Dec83RSW
  1378.  
  1379. : E-INIT
  1380.    DEPTH IF SCR ! THEN
  1381.    GET-USER-ID
  1382.    NEW-SCR ;
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  -->
  1392.  
  1393. \ E
  1394.        FORTH DEFINITIONS
  1395. : E
  1396.    EDIT
  1397.    E-INIT
  1398.    BEGIN
  1399.      DISPLAY-STATUS
  1400.      0 MOVE-CURSOR
  1401.      &MODE @ IF
  1402.        E-INSERT
  1403.      ELSE
  1404.        E-OVERSTRIKE
  1405.      THEN
  1406.    AGAIN ;
  1407.  
  1408.         -->
  1409. \ CLRID clear screen editor date/user ID              13Dec83RSW
  1410.         FORTH DEFINITIONS DECIMAL
  1411.  
  1412. : CLRID         \ clears screen editor date/name ID
  1413.         EDIT
  1414.         &E-ID 12 BLANK
  1415.         FORTH
  1416.         ;
  1417.                  -->
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425. \  CONFIGURE USER'S TERMINAL                          13Dec83RSW
  1426.  
  1427.         DECIMAL EDIT DEFINITIONS
  1428.  
  1429.  100 LOAD               \ only configure IBM-PC video for now
  1430.  
  1431.  FORTH DEFINITIONS DECIMAL
  1432.  CR ." Ready to Edit" CR CR
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441. \ CURSOR COMMANDS FOR MVPFORTH/IBM-PC VERSION         29Oct83RSW
  1442.   HEX
  1443. CODE PC-CRTXY  ( (S  X Y --- )  \ POSITION IBM PC CURSOR
  1444.         AX              POP     \ FETCH Y INTO AL
  1445.         DX              POP     \ FETCH X INTO DL
  1446.         DH, AL          MOV     \ PUT Y INTO DH
  1447.         AH, # 2         MOV     \ AH=2 FOR CURSOR POS CMD
  1448.         BH, # 0         MOV     \ BH=0 FOR PAGE 0
  1449.         SI              PUSH    \ SAVE NECESSARY REGS
  1450.         BP              PUSH
  1451.         10              INT     \ DO IBM VIDEO ROM ROUTINE
  1452.         BP              POP     \ RECOVER REGS
  1453.         SI              POP
  1454.         NEXT            JMP  END-CODE  DECIMAL -->
  1455.  
  1456.  
  1457. \ CURSOR COMMANDS CONT.                               29Oct83RSW
  1458.   HEX
  1459. CODE <CLRSCR>  ( (S --- )       \ CLEAR ENTIRE IBM PC SCREEN
  1460.         AX, # 600       MOV     \ AH=6, AL=0 FOR BLANK SCROLL UP
  1461.         BH, # 7         MOV     \ BH=7 FOR NORMAL VIDEO
  1462.         DX, # 184F      MOV     \ DH=24D, DL=79D FOR BOT CORNER
  1463.         CX, # 0         MOV     \ CH=0, CL=0 FOR TOP CORNER
  1464.         SI              PUSH    \ SAVE NECCESARY REGS
  1465.         BP              PUSH
  1466.         10              INT     \ DO IBM VIDEO ROM ROUTINE
  1467.         BP              POP     \ RECOVER REGS
  1468.         SI              POP
  1469.         NEXT            JMP   END-CODE  DECIMAL -->
  1470.  
  1471.  
  1472.  
  1473. ( CURSOR COMMANDS CONT. ) HEX   \                     29Oct83RSW
  1474. CODE PC-CRTCLR-EOL  ( (S POS --- ) \ IBM PC CLEAR TO END OF LINE
  1475.         AX              POP     \ THROW AWAY COMPUTED POSITION
  1476.         AH, # 3         MOV     \ READ CURSOR ADDRESS CMD
  1477.         BH, # 0         MOV     \ PAGE 0 OF VIDEO
  1478.         SI PUSH  BP PUSH        \ SAVE NECESSARY REGS
  1479.         10              INT     \ DO IBM ROM BIOS ROUTINE
  1480.         DH, # 0         MOV     \ IGNORE ROW INFO
  1481.         CX, # 46        MOV     \ MAX = C/L + %XOFF
  1482.         CX, DX          SUB     \ CX = # OF CHARS LEFT ON LINE
  1483.       ( IF ELSE                 \ EXACTLY = ?           )
  1484.         AX, # 0A20      MOV     \ AH=10D, AL=' ' FOR VIDEO WRT
  1485.         BH, # 0         MOV     \ PAGE 0 OF VIDEO
  1486.         10              INT     \ DO IBM ROM BIOS ROUTINE
  1487.       ( ENDIF                   \  SKIPPED CODE IF EQUAL )
  1488.         BP POP  SI POP  NEXT JMP  END-CODE   DECIMAL -->
  1489. \ cursor & video for IBM-PC continued
  1490.       HEX
  1491. : PC-CLRSCR    <CLRSCR> 0 0 PC-CRTXY ;
  1492.  
  1493. ' PC-CRTXY         CFA 'CRTXY !
  1494. ' PC-CLRSCR        CFA 'CRTCLR-SCR !
  1495. ' PC-CRTCLR-EOL    CFA 'CLEAR-TO-EOL !
  1496.  
  1497.  DECIMAL 103 . ." done loading SCREEN EDITOR " CR BEEP
  1498.  
  1499. \ ******** end of Henry Laxen's EDITOR *************
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505. \ _________________    F1-F10 special function keys   24Dec83RSW
  1506.   |insert |normal |
  1507.   | line 1|exit  2|   Home -- move up 4 lines
  1508.   -----------------
  1509.   |abandon| clear |    End -- move down 4 lines
  1510.   | scrn 3| scrn 4|
  1511.   -----------------    Ins -- toggle insert mode
  1512.   |       | blank |
  1513.   |      5| line 6|    Del -- delete character
  1514.   -----------------
  1515.   |delete |delete |   PgUp -- edit next lower # screen
  1516.   | word 7| line 8|
  1517.   -----------------   PgDn -- edit next higher # screen
  1518.   | left  |right  |
  1519.   | word 9|word 10|
  1520.   -----------------
  1521. ne 8|
  1522.   -----------------   PgDn -- edit next hig